#include "type.h"
#include "const.h"
#include "protect.h"
#include "tty.h"
#include "console.h"
#include "string.h"
#include "proc.h"
#include "global.h"
#include "proto.h"

/*----------------------------------------------------
函数名：schedule
作用：  进程调度函数
------------------------------------------------------*/
PUBLIC void schedule()
{
    PROCESS* p;
    int greatest_ticks = 0;

    while (!greatest_ticks) {
        // 循环寻找剩余时间片最多的进程，并切换
        for (p = proc_table; p < proc_table + NR_TASKS + NR_PROCS; p++) {
            if (p->ticks > greatest_ticks) {
                greatest_ticks = p->ticks;
                p_proc_ready = p;
            }
        }

        if (!greatest_ticks) {  // 所有进程剩余时间片都为 0，重新赋值
            for (p = proc_table; p < proc_table + NR_TASKS + NR_PROCS; p++) {
                p->ticks = p->priority;
            }
        }
    }
        
}

/*----------------------------------------------------
函数名：int sys_get_ticks()
作用：  第一个系统调用函数
------------------------------------------------------*/
PUBLIC int sys_get_ticks()
{
    return ticks;
}